export interface MvRes {
  code: number
  category: number
  result: Video[]
}

export interface Video {
  id: number
  type: number
  name: string
  copywriter: string
  picUrl: string
  canDislike: boolean
  trackNumberUpdateTime?: any
  duration: number
  playCount: number
  subed: boolean
  artists: MvArtist[]
  artistName: string
  artistId: number
  alg: string
}

export interface MvArtist {
  id: number
  name: string
}

// ---

export interface RootMvTag {
  code: number
  message: string
  data: Datum[]
}

export interface Datum {
  id: number
  name: string
  url?: string
  relatedVideoType?: any
  selectTab: boolean
  abExtInfo?: any
}

// ---

export interface RootMVRes {
  msg: string
  code: number
  hasmore: boolean
  datas: Data2[]
  rcmdLimit: number
}

export interface Data2 {
  type: number
  displayed: boolean
  alg: string
  extAlg?: any
  data: Data
}

export interface Data {
  alg: string
  scm: string
  threadId: string
  coverUrl: string
  height: number
  width: number
  title: string
  description?: string
  commentCount: number
  shareCount: number
  resolutions: Resolution[]
  creator: Creator
  urlInfo?: any
  videoGroup: VideoGroup[]
  previewUrl?: any
  previewDurationms: number
  hasRelatedGameAd: boolean
  markTypes?: any
  relateSong: (RelateSong | RelateSong2 | RelateSong3 | RelateSong4 | RelateSong5 | RelateSong6 | RelateSong7)[]
  relatedInfo?: any
  videoUserLiveInfo?: any
  vid: string
  durationms: number
  playTime: number
  praisedCount: number
  praised: boolean
  subscribed: boolean
}

export interface RelateSong7 {
  name: string
  id: number
  pst: number
  t: number
  ar: Ar[]
  alia: any[]
  pop: number
  st: number
  rt: string
  fee: number
  v: number
  crbt?: any
  cf: string
  al: Al4
  dt: number
  h: L
  m: L
  l: L
  a?: any
  cd: string
  no: number
  rtUrl?: any
  ftype: number
  rtUrls: any[]
  djId: number
  copyright: number
  s_id: number
  mst: number
  cp: number
  mv: number
  rtype: number
  rurl?: any
  publishTime: number
  privilege: Privilege
}

export interface RelateSong6 {
  name: string
  id: number
  pst: number
  t: number
  ar: Ar[]
  alia: string[]
  pop: number
  st: number
  rt: string
  fee: number
  v: number
  crbt?: any
  cf: string
  al: Al4
  dt: number
  h: L
  m: L
  l: L
  a?: any
  cd: string
  no: number
  rtUrl?: any
  ftype: number
  rtUrls: any[]
  djId: number
  copyright: number
  s_id: number
  mst: number
  cp: number
  mv: number
  rtype: number
  rurl?: any
  publishTime: number
  tns: string[]
  privilege: Privilege
}

export interface Al4 {
  id: number
  name: string
  picUrl: string
  tns: any[]
  pic: AvatarImgId
}

export interface RelateSong5 {
  name: string
  id: number
  pst: number
  t: number
  ar: Ar[]
  alia: any[]
  pop: number
  st: number
  rt: string
  fee: number
  v: number
  crbt?: any
  cf: string
  al: Al3
  dt: number
  h: L
  m: L
  l: L
  a?: any
  cd: string
  no: number
  rtUrl?: any
  ftype: number
  rtUrls: any[]
  djId: number
  copyright: number
  s_id: number
  mst: number
  cp: number
  mv: number
  rtype: number
  rurl?: any
  publishTime: number
  tns: string[]
  privilege: Privilege
}

export interface RelateSong4 {
  name: string
  id: number
  pst: number
  t: number
  ar: Ar[]
  alia: any[]
  pop: number
  st: number
  rt?: any
  fee: number
  v: number
  crbt?: any
  cf: string
  al: Al
  dt: number
  h: L
  m: L
  l: L
  a?: any
  cd: string
  no: number
  rtUrl?: any
  ftype: number
  rtUrls: any[]
  djId: number
  copyright: number
  s_id: number
  mst: number
  cp: number
  mv: number
  rtype: number
  rurl?: any
  publishTime: number
  privilege: Privilege
}

export interface RelateSong3 {
  name: string
  id: number
  pst: number
  t: number
  ar: Ar[]
  alia: any[]
  pop: number
  st: number
  rt: string
  fee: number
  v: number
  crbt?: any
  cf: string
  al: Al3
  dt: number
  h?: any
  m: L
  l: L
  a?: any
  cd: string
  no: number
  rtUrl?: any
  ftype: number
  rtUrls: any[]
  djId: number
  copyright: number
  s_id: number
  mst: number
  cp: number
  mv: number
  rtype: number
  rurl?: any
  publishTime: number
  privilege: Privilege
}

export interface Al3 {
  id: number
  name: string
  picUrl: string
  tns: any[]
  pic: number
}

export interface RelateSong2 {
  name: string
  id: number
  pst: number
  t: number
  ar: Ar[]
  alia: string[]
  pop: number
  st: number
  rt?: any
  fee: number
  v: number
  crbt?: any
  cf: string
  al: Al2
  dt: number
  h: L
  m: L
  l: L
  a?: any
  cd: string
  no: number
  rtUrl?: any
  ftype: number
  rtUrls: any[]
  djId: number
  copyright: number
  s_id: number
  mst: number
  cp: number
  mv: number
  rtype: number
  rurl?: any
  publishTime: number
  tns: string[]
  privilege: Privilege
}

export interface Al2 {
  id: number
  name: string
  picUrl: string
  tns: string[]
  pic: AvatarImgId
}

export interface RelateSong {
  name: string
  id: number
  pst: number
  t: number
  ar: Ar[]
  alia: any[]
  pop: number
  st: number
  rt: string
  fee: number
  v: number
  crbt?: any
  cf: string
  al: Al
  dt: number
  h?: any
  m?: any
  l: L
  a?: any
  cd: string
  no: number
  rtUrl?: any
  ftype: number
  rtUrls: any[]
  djId: number
  copyright: number
  s_id: number
  mst: number
  cp: number
  mv: number
  rtype: number
  rurl?: any
  publishTime: number
  privilege: Privilege
}

export interface Privilege {
  id: number
  fee: number
  payed: number
  st: number
  pl: number
  dl: number
  sp: number
  cp: number
  subp: number
  cs: boolean
  maxbr: number
  fl: number
  toast: boolean
  flag: number
  preSell: boolean
}

export interface L {
  br: number
  fid: number
  size: number
  vd: number
}

export interface Al {
  id: number
  name: string
  picUrl: string
  tns: any[]
  pic_str: string
  pic: AvatarImgId
}

export interface Ar {
  id: number
  name: string
  tns: any[]
  alias: any[]
}

export interface VideoGroup {
  id: number
  name: string
  alg?: any
}

export interface Creator {
  defaultAvatar: boolean
  province: number
  authStatus: number
  followed: boolean
  avatarUrl: string
  accountStatus: number
  gender: number
  city: number
  birthday: number
  userId: number
  userType: number
  nickname: string
  signature: string
  description: string
  detailDescription: string
  avatarImgId: AvatarImgId
  backgroundImgId: AvatarImgId
  backgroundUrl: string
  authority: number
  mutual: boolean
  expertTags?: any
  experts?: Expert
  djStatus: number
  vipType: number
  remarkName?: any
  backgroundImgIdStr: string
  avatarImgIdStr: string
}

export interface Expert {
  '1': string
}

export interface AvatarImgId {
  s: number
  e: number
  c: number[]
}

export interface Resolution {
  resolution: number
  size: number
}
